GO
NFS用于在网络上共享存储。举例来说,假如有三台机器A、B和C,它们需要访问同一个目录,且目录中都是图片。传统的做法是把这些图片分别放到A、B、C中,但若使用NFS,只需要把图片放到A上,然后A共享给B和C即可。访问B和C时,是通过网络的方式去访问A上的那个目录的。
1. 服务端配置NFS
1.1. 安装
在CentOS上使用NFS服务需要安装两个包:nfs-utils和rpcbind。在使用yum工具安装nfs-utils时会一并安装rpcbind。如下所示:yum install -y nfs-utils
说明:
- 以往的CentOS版本是需要安装protmap包的,从CentOS6开始,就改为安装rpcbind包了。
1.2. 配置
配置NFS比较简单,只需要编辑配置文件/etc/exports。如下所示,是一个非常简单的例子,用来创建一个简单的NFS服务器。
首先,修改配置文件(默认该文件为空),如下所示:
说明:
- 这个配置文件就一行,共分为三个部分
- 第一个部分是本地要共享出去的目录
- 第二个部分是允许访问的主机(可以是一个IP,也可以是一个IP段)
- 第三个部分是小括号里面的一些权限选项
- 如上例子所示的这条配置的意义是,要共享的目录为/home/nfstestdir,信任的主机为192.168.188.0/24这个网段,权限为读写,同步模式,下限定所有使用者,并且限定的UID和GID都为1000
- 关于第三部分的权限选项的说明
- rw:表示读/写
- ro:表示只读
- sync:同步模式,表示内存中的数据实时写入磁盘
- async:非同步模式,表示把内存中的数据定期写入磁盘
- no_root_squash:加上这个选项后,root用户就会对共享目录拥有至高的权限控制,就像是对本机的目录操作一样,但这样安全性降低
- root_squash:与no_root_squash选项相对应,表示root拥护对共享目录的权限不高,只有普通用户的权限,即限制了root
- all_squash:表示不管使用NFS的用户是谁,其身份都会被限定为一个指定的普通用户身份
- anonuid/anongid:要和root_squash以及all_squash选项一同使用,用于指定使用NFS的用户被限定后的UID和GID,但前提是本机的/etc/passwd中存在相应的UID和GID
其次,编辑好配置文件后,创建相关目录并启动NFS服务,如下所示:
说明:
- 在启动NFS服务之前,需要先启动rpcbind服务(CentOS的老版本中为portmap])
2. 客户端挂载NFS
假设两台机器的IP分别为192.168.188.128和192.168.188.129。其中提供NFS服务的是192.168.188.128,客户端是192.168.188.129。
在客户端挂载NFS之前,需要查看服务端共享了哪些目录。在客户端(188.129)安装nfs-utils包后,可以使用showmount
命令查看(这个命令就是前面的包所带的),如下所示:
说明:
- 使用命令
showmount -e IP
就可以查看NFS的共享情况,这个IP为NFS服务端IP - 从上例中可以看到192.168.188.128的共享目录为/home/nfstestdir,信任主机为192.168.188.0/24这个网段。
.
然后在客户端上(188.129)挂载NFS,如下所示:
说明:
- 使用命令
df -h
可以看到增加了一个/mnt分区,它就是NFS的共享目录了。 - -o后面跟挂载选项,如果不加
-o nfsvers=3
则在挂载目录下的文件属主和属组都是nobody,如果指定 nfsvers=3 则显示UID和GID,所以尽量加上这个选项,避免权限混乱 - 假如在该NFS的共享目录里面创建文件的权限不够,则需要在客户端中给共享目录相应的权限(如:chmod 777 /home/nfstestdir)
- 在权限配置正确后,客户端在NFS共享目录里面创建文件即可成功。(在上例配置的情况下,客户端在NFS共享目录里面创建的文件所有者和所属组的UID和GID都为1000)
3. 命令 exportfs
这个命令用于这种情况,当改变NFS的配置文件/etc/exports后,使用该命令挂载而不需要重启NFS服务。
exportfs命令的常用选项为-a、-r、-u和-v,各个选项的含义如下:
常用选项 | 含义 |
---|---|
-a | 表示全部挂载或者卸载 |
-r | 表示重新挂载 |
-u | 表示卸载某一个目录 |
-v | 表示显示共享的目录 |
4. 一个测试实验
下面是关于以上知识的一个实验(从上面的例子中继续试验):
首先修改服务端(188.128)的配置文件,如下所示:
然后在服务端(188.128)上执行如下命令:
在上一节用到了mount命令。用mount命令来挂载NFS服务是有讲究的,它要用-t nfs
来指定挂载的类型为nfs。另外在挂载NFS服务时,常用-o nolock
选项(即不加锁)。例如在客户端(188.129)上执行如下命令:
5. 开机自动挂载NFS(基于上面的实验)
还可以把要挂载的NFS目录写入到客户端上的/etc/fstab文件中,挂载时只需要执行mount -a
命令。例如在/etc/fstab文件中增加一行,如下所示:
由于刚刚已挂载了NFS,需要先卸载,执行如下命令:
然后重新挂载,执行如下命令:
说明:
- 这样操作的好处是以后开机会自动挂载NFS。
- 刚刚挂载的/aminglinux/目录在服务端设置为了no_root_squash,它并不会限制root用户,也就是说使用root用户创建文件时,跟在客户端本机上创建的一样。
OK